<?php

namespace Biz\service;

use Biz\cache\GoodsSkuId;
use Biz\cache\Sku;
use Biz\model\GoodsSku as mGoodsSku;
use Biz\model\GoodsSkuAttr;
/**
 * @deprecated
 */
class SkuInfo
{

    public static function getSkusInfoByIds(array $sku_ids)
    {
        $skusInfo = self::getSkuList([], $sku_ids, false);

        $goodsids = array_column($skusInfo, "goods_id");

        $goodsInfos = GoodsDetail::GoodsInfoList($goodsids);

        $skusInfo = array_column($skusInfo, null, "id");


        $goodsInfos = array_column($goodsInfos, null, "goods_id");

        return array_map(function ($skuInfo) use ($goodsInfos) {
            $skuInfo['goods_info'] = $goodsInfos[$skuInfo['goods_id']];

            return $skuInfo;
        }, $skusInfo);

    }

    public static function getSkuInfo($sku_id)
    {
        return self::getSkusInfoByIds([$sku_id])[$sku_id];
    }

	/**
	 *
	 *
	 * @param array $goods_ids
	 * @param array $sku_ids
	 * @param bool $is_has_stock
	 * @return array
	 */
    public static function getSkuList(array $goods_ids, array $sku_ids, $is_has_stock = true)
    {
    	$skuIds = [];
    	if ($goods_ids) {
    		$skuIds = GoodsSkuId::getSkuIds($goods_ids);
		}
		if ($skuIds) array_walk($skuIds, function ($Ids, $goods_id) use (&$sku_ids) {
			$sku_ids = array_merge($sku_ids, $Ids);
		});

    	list($sku_ids_nocache, $skuInfos) = Sku::getMultis( (array) $sku_ids);


    	if ($sku_ids_nocache) {
    		$skuInfos = array_merge(
    			$skuInfos,
				self::getCacheDatas($sku_ids_nocache)
			);
		}

//		var_dump($skuInfos);die;

		//正在进行中的 sku 限时抢
		$limitTimeRobInfos = Activitys::getLimitTimeRobbBySkuIds($sku_ids);

		$skuInfos = array_map(function ($skuInfo) use ($limitTimeRobInfos, $is_has_stock) {

			if (isset($limitTimeRobInfos[$skuInfo['id']]) && $limitTimeRobInfos[$skuInfo['id']]) {
				$skuInfo['promo_info'] = $limitTimeRobInfos[$skuInfo['id']];

				$skuInfo['buy_price'] = $limitTimeRobInfos[$skuInfo['id']]['promo_price'];
				$skuInfo['stock'] = $limitTimeRobInfos[$skuInfo['id']]['promo_stock'];
			}

			//如果需要有库存的skuinfo
			if ($is_has_stock === true ) {
				if ($skuInfo['stock']) {
					return $skuInfo;
				} else {
					return [];
				}
			} else {
				return $skuInfo;
			}


		}, $skuInfos);

        return array_filter($skuInfos);


    }

    public static function getCacheDatas(array $sku_ids)
	{
		$skuInfos = mGoodsSku::getSkus(['id' => $sku_ids], false);
		$sku_attr_ids = array_merge(array_column($skuInfos, "sku_attr_t1"), array_column($skuInfos, "sku_attr_t2"));
		$goodsSkuAttrs = GoodsSkuAttr::getInfoList($sku_attr_ids, true);

		$skuInfos = array_map(function ($skuInfo) use ($goodsSkuAttrs) {
			$skuInfo['buy_price'] = $skuInfo['price'];
			$skuInfo['promo_info'] = [];
			$skuInfo['sku_attr_t1'] = $skuInfo['sku_attr_t1'] ? $goodsSkuAttrs[$skuInfo['sku_attr_t1']] : [];
			$skuInfo['sku_attr_t2'] = $skuInfo['sku_attr_t2'] ? $goodsSkuAttrs[$skuInfo['sku_attr_t2']] : [];

			$skuAttrList = array_filter([$skuInfo['sku_attr_t1'], $skuInfo['sku_attr_t2']], function ($v) {
				return isset($v['id']);
			});

            $skuInfo['extend_info'] = isset($skuInfo['sku_attr_t1']['extend_info']) ? $skuInfo['sku_attr_t1']['extend_info']  : '';
            $skuInfo['extend_info_url'] = isset($skuInfo['sku_attr_t1']['extend_info_url']) ? $skuInfo['sku_attr_t1']['extend_info_url']  : '';
            $skuInfo['extend_info_thumb_url'] = isset($skuInfo['sku_attr_t1']['extend_info_url']) ? $skuInfo['sku_attr_t1']['extend_info_thumb_url'] : '';
			$skuInfo['sku_desc'] = implode(',', array_column($skuAttrList, 'value'));
			$skuInfo['sku_attr'] = implode(',', array_column($skuAttrList, 'id'));
			$skuInfo['name'] = str_replace(',', ' ', $skuInfo['sku_desc']);

			($skuInfo['spec_params'] && is_array($skuInfo['spec_params'])) ? array_unshift($skuInfo['spec_params'], $skuInfo['name']) : null;

			return $skuInfo;
		}, $skuInfos);

		$skuInfos = array_column($skuInfos, null, 'id');

		Sku::setMultis($skuInfos);
		return $skuInfos;

	}

}